from flask import Flask, render_template
import pandas as pd
import datetime
import numpy as np
from pyecharts import Line

citys = ['beijing', 'shanghai', 'guangzhou', 'shenzhen']
for i in range(1):
    filename = 'air_' + citys[i] + '_2020.csv'
    df = pd.read_csv(filename, header=None, names=["日期", "空气质量等级", "AQI", "AQI排名", "PM"])
for i in range(2):
    filename = 'air_' + citys[i] + '_2020.csv'
    df1 = pd.read_csv(filename, header=None, names=["日期", "空气质量等级", "AQI", "AQI排名", "PM"])
for i in range(3):
    filename = 'air_' + citys[i] + '_2020.csv'
    df2 = pd.read_csv(filename, header=None, names=["日期", "空气质量等级", "AQI", "AQI排名", "PM"])
for i in range(4):
    filename = 'air_' + citys[i] + '_2020.csv'
    df3 = pd.read_csv(filename, header=None, names=["日期", "空气质量等级", "AQI", "AQI排名", "PM"])


app = Flask(__name__)



@app.route('/')
def shouye():
    return render_template('shouye.html')


@app.route('/index')
def grade():
    # 2020年北上广深空气质量情况，具体处理数据可参考python数据处理期末项目ipynb文档
    tianqi_dict = { '城市':['北京','上海','广州','深圳'],
               '优': ['165', '235','257', '304'],
               '良': ['158', '114', '108', '62'],
               '轻度污染':['28','12','1','0'],
               '中度污染':['9','4','0','0'],
               '重度污染':['5','1','0','0'],
               '严重污染':['1','0','0','0']
               }
    df = pd.DataFrame(tianqi_dict)
    return render_template(
        "2020年北上广深全年空气质量情况.html",
        # df_data 是HTML文件中的变量
        df_data=df.to_html(classes="male", index=False)

    )


#2020年北上广深AQI全年走势折线图
@app.route('/AOI',methods=['GET', 'POST'])
def AOI():
# 提取北京数据中的日期和AOI列
    dom = df[['日期', 'AQI']]
    list1 = []
    for j in dom['日期']:
        time = j.split('-')[1] # 删除-，提取月份
        list1.append(time)
    df['月'] = list1 # 添加月份列
    month_message = df.groupby(['月'])# 以月份进行聚合
    month_com = month_message['AQI'].agg(['mean']) # 对AOI进行平均数计算
    month_com.reset_index(inplace=True) # 重新建立索引
    month_com_last = month_com.sort_index() #  # 排序
    v = []
    v1 = np.array(month_com_last['mean']) # 创建平均数的数组
    v1 = ["{}".format(int(i)) for i in v1]
    v.append(v1)

# 提取上海数据中的日期和AQI列
    dom1 = df1[['日期', 'AQI']]
# 对日期列进行处理
    list2 = []
    for j in dom1['日期']:
        time1 = j.split('-')[1] # 删除-，提取月份
        list2.append(time1)
    df1['月'] = list2 # 添加月份列
    month_message1 = df1.groupby(['月'])# 以月份进行聚合
    month_com1 = month_message1['AQI'].agg(['mean']) # 对AOI进行平均数计算
    month_com1.reset_index(inplace=True) # 重新建立索引
    month_com_last1 = month_com1.sort_index() #  # 排序
    v2 = np.array(month_com_last1['mean']) # 创建平均数的数组
    v2 = ["{}".format(int(i)) for i in v2]
    v.append(v2)

# 提取广州数据中的日期和AQI列
    dom2 = df2[['日期', 'AQI']]
# 对日期列进行处理
    list3 = []
    for j in dom2['日期']:
        time2 = j.split('-')[1] # 删除-，提取月份
        list3.append(time2)
    df2['月'] = list3 # 添加月份列
    month_message2 = df2.groupby(['月'])# 以月份进行聚合
    month_com2 = month_message2['AQI'].agg(['mean']) # 对AOI进行平均数计算
    month_com2.reset_index(inplace=True) # 重新建立索引
    month_com_last2 = month_com2.sort_index() #  # 排序
    v3 = np.array(month_com_last2['mean']) # 创建平均数的数组
    v3 = ["{}".format(int(i)) for i in v3]
    v.append(v3)

# 提取深圳数据中的日期和AQI列
    dom3 = df3[['日期', 'AQI']]
# 对日期列进行处理
    list4 = []
    for j in dom3['日期']:
        time3 = j.split('-')[1] # 删除-，提取月份
        list4.append(time3)
    df3['月'] = list4 # 添加月份列
    month_message3 = df3.groupby(['月'])# 以月份进行聚合
    month_com3 = month_message3['AQI'].agg(['mean']) # 对AOI进行平均数计算
    month_com3.reset_index(inplace=True) # 重新建立索引
    month_com_last3 = month_com3.sort_index() #  # 排序
    v4 = np.array(month_com_last3['mean']) # 创建平均数的数组
    v4 = ["{}".format(int(i)) for i in v4]
    v.append(v4)
# 创建Dataframe表
    data01=pd.DataFrame(v)
    data01['城市'] = ['北京','上海','广州','深圳'] #新建一列城市
    mid = data01['城市']
    data01.drop(labels=['城市'], axis=1,inplace = True)   # 删除城市列
    data01.insert(0, '城市', mid)  # 以第一列方式插入
    data01.columns=['城市','1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月'] # 直接更改列名

    # 返回页面结果（变量名称 python文件中的变量 VS HTML文件中的变量）
    return render_template(
        "2020年北上广深AQI全年走势图.html",
        # AOI_data 是HTML文件中的变量
        AQI_data=data01.to_html(classes="male", index=False)

    )

#2020年北上广深PM2.5全年走势折线图
@app.route('/PM',methods=['GET', 'POST'])
def quyu():
    # 提取北京数据中的日期和PM2.5列
    dom = df[['日期', 'PM']]
# 对日期列进行处理
    list1 = []
    for j in dom['日期']:
        time = j.split('-')[1] # 删除-，提取月份
        list1.append(time)
    df['月'] = list1 # 添加月份列
    month_message = df.groupby(['月'])# 以月份进行聚合
    month_com = month_message['PM'].agg(['mean']) # 对AOI进行平均数计算
    month_com.reset_index(inplace=True) # 重新建立索引
    month_com_last = month_com.sort_index() #  # 排序
    s = []
    s2 = np.array(month_com_last['mean']) # 创建平均数的数组
    s2 = ["{}".format(int(i)) for i in s2]
    s.append(s2)

# 提取上海数据中的日期和AOI列
    dom1 = df1[['日期', 'PM']]
# 对日期列进行处理
    list2 = []
    for j in dom1['日期']:
        time1 = j.split('-')[1] # 删除-，提取月份
        list2.append(time1)
    df1['月'] = list2 # 添加月份列
    month_message1 = df1.groupby(['月'])# 以月份进行聚合
    month_com1 = month_message1['PM'].agg(['mean']) # 对AOI进行平均数计算
    month_com1.reset_index(inplace=True) # 重新建立索引
    month_com_last1 = month_com1.sort_index() #  # 排序
    s2 = np.array(month_com_last1['mean']) # 创建平均数的数组
    s2 = ["{}".format(int(i)) for i in s2]
    s.append(s2)

    # 提取广州数据中的日期和AOI列
    dom2 = df2[['日期', 'PM']]
    # 对日期列进行处理
    list3 = []
    for j in dom2['日期']:
        time2 = j.split('-')[1] # 删除-，提取月份
        list3.append(time2)
    df2['月'] = list3 # 添加月份列
    month_message2 = df2.groupby(['月'])# 以月份进行聚合
    month_com2 = month_message2['PM'].agg(['mean']) # 对AOI进行平均数计算
    month_com2.reset_index(inplace=True) # 重新建立索引
    month_com_last2 = month_com2.sort_index() #  # 排序
    s3 = np.array(month_com_last2['mean']) # 创建平均数的数组
    s3 = ["{}".format(int(i)) for i in s3]
    s.append(s3)

    # 提取深圳数据中的日期和AOI列
    dom3 = df3[['日期', 'AQI']]
    # 对日期列进行处理
    list4 = []
    for j in dom3['日期']:
        time3 = j.split('-')[1] # 删除-，提取月份
        list4.append(time3)
    df3['月'] = list4 # 添加月份列
    month_message3 = df3.groupby(['月'])# 以月份进行聚合
    month_com3 = month_message3['AQI'].agg(['mean']) # 对AOI进行平均数计算
    month_com3.reset_index(inplace=True) # 重新建立索引
    month_com_last3 = month_com3.sort_index() #  # 排序
    s4 = np.array(month_com_last3['mean']) # 创建平均数的数组
    s4 = ["{}".format(int(i)) for i in s4]
    s.append(s4)

    # 创建Dataframe表
    data02=pd.DataFrame(s)  # numpy转换为Dataframe
    data02['城市'] = ['北京','上海','广州','深圳']  #新建一列城市
    mid = data02['城市']
    data02.drop(labels=['城市'], axis=1,inplace = True)  # 删除城市列
    data02.insert(0, '城市', mid)  # 以第一列方式插入
    data02.columns=['城市','1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月']  # 直接更改列名




    return render_template(
        "2020年北上广深PM2.5全年走势图.html",
        # PM2.5_data 是HTML文件中的变量
        PM_data=data02.to_html(classes="female", index=True),

    )


@app.route('/guangzhou')
def gz():
    v1 = ["{}".format(int(i)) for i in np.array(df2['PM'])]  # 提取PM2.5指数建立数组存入字典
    begin = datetime.date(2020, 1, 1)  # 设立开始日期
    end = datetime.date(2020, 12, 31) # 设立结束日期
    data = [[str(begin + datetime.timedelta(days=i)), v1[i]] for i in range((end - begin).days + 1)]  #构建日期和PM2.5指数的数组
    data03=pd.DataFrame(data)
    data03.columns=['日期','PM2.5指数'] # 直接修改列名
    return render_template(
        "2020年广州PM2.5指数日历图.html",
        # df_data 是HTML文件中的变量
        guangzhou_data=data03.to_html(classes="female", index=False)

    )








if __name__ == '__main__':
    app.run(
        debug=True
    )
